import mountElement from './mountElement';
import updateComponent from './updateComponent';
import { isSameComponent } from './utils';

// 1) 组件本身的 virtualDOM 对象 通过它可以获取到组件最新的 props
// 2) 要更新的组件的实例对象 通过它可以调用组件的生命周期函数 可以更新组件的 props 属性 可以获取到组件返回的最新的 Virtual DOM
// 3) 要更新的 DOM 象 在更新组件时 需要在已有DOM对象的身上进行修改 实现DOM最小化操作 获取旧的 Virtual DOM 对象
// 4) 如果要更新的组件和旧组件不是同一个组件 要直接将组件返回的 Virtual DOM 显示在页面中 此时需要 container 做为父级容器
export default function diffComponent(virtualDOM, oldComponent, oldDOM, container) {
  if (isSameComponent(virtualDOM, oldComponent)) {
    // 是同一个组件 走更新
    updateComponent(virtualDOM, oldComponent, oldDOM, container);
  } else {
    // 不是同一个组件 走替换操作
    mountElement(virtualDOM, container, oldDOM);
  }
}
